<?php
class CMS_Models_Module extends Zend_Db_Table_Abstract
{
  protected $_name = "module";	
  
  public function __construct( )
  {
    parent::__construct(array('table' => $this->_name));
  }
  /** 
   * Obtiene los modulos disponibles en el sistema
   * @return array con los modulos 
   */
  public function getAll()
  {
        return $this->fetchAll();
  }

  /**
   *
   * Pregunta si la categoria tiene permisos para el controlador
   * @param int $id_category
   * @param string> $controller
   * @return boolean
   */

  public function categoryHasPermision($id_category, $controller)
  {
    $query = $this->select($this->_name.".*")
                  ->setIntegrityCheck(false)
                  ->join("category_has_permisions","category_has_permisions.id_module = ".$this->_name.".id")
                  ->where("category_has_permisions.id_category = $id_category ")
                  ->where($this->_name.".system_name = '$controller'");
    $result = $this->fetchAll($query);
    if ( count($result) > 0)
        return true;
    else
        return false;
  }

  /**
   * Retorna un arreglo con los modulos que están incluídos en una categoría de usuarios
   * @param $id : id de la categoria.
   * @return array con modulos
   */
  public function getModulesByCategory($id)
  {
    $query = $this->select($this->_name.".*")
                  ->setIntegrityCheck(false)
                  ->join("category_has_permisions","category_has_permisions.id_module = ".$this->_name.".id")
                  ->where("category_has_permisions.id_category = '$id'");
    return $this->fetchAll($query);
  }

  /**
   * Obtiene el modulo padre el modulo que se pasa como parametro
   * @param String $controller
   * @return array con los modulos
   */
  public function getActualRootModule($controller)
  {
    $sql = "select m2.* from module m
            inner join module m2 on ( m.id_module = m2.id )
            where m.system_name = '$controller'";
    return CMS_Db::getInstance()->fetchAll($sql);
  }

    /**
     * Obtiene  todos los modulos ( funcionales) sin incluir los meta modulos
     * @param string $module
     * @param int $category
     * @return array con los modulos
     */

   public function getSubModules( $module, $category )
   {
    $sql = $this->select($this->_name.".*")
                    ->setIntegrityCheck(false)
                    ->joinInner("category_has_permisions",$this->_name.".id = category_has_permisions.id_module")
                    ->where($this->_name.".id_module = $module")
                    ->where("category_has_permisions.id_category = $category");
    return $this->fetchAll($sql);
   }

   /**
    * Obtiene todos los metamodulos
    * @param int $id
    * @return array de metamodulos
    */
   public function getRootModules($id)
   {
    $sql = "select m.* from module m
            where m.id_module = 0 and  (
                                        select count(*) from module m2
					inner join category_has_permisions c
					on ( m2.id = c.id_module )
					where m2.id_module = m.id
					and c.id_category = $id ) > 0
            group by m.id  ";
    	
    	return CMS_Db::getInstance()->fetchAll($sql);
    }

   /**
    * Actualiza los permisos.
    * Asocia las categorias al modulo con id
    * @param string $categories
    * @param string $id
    */
   public function updatePermisions($categories, $id)
   {
    CMS_Db::getInstance()->delete('category_has_permisions', "id_category = $id" );
    foreach( $categories as $c )
    {
        CMS_Db::getInstance()->insert('category_has_permisions', array( 'id_module' => $c, 'id_category' => $id ));
    }
  }

  public function getParentModules()
  {
    return $this->fetchAll("id_module = 0");
  }
  
}  